/**
 * @author takaratsunehito
 */
$(function(){
	CountupTimer.initGears();
	var timers = CountupTimer.restoreTimers();
	if(timers.length > 0){
		var timer;
		for(var i=0; i<timers.length; i++){
			timer = timers[i];
			timer.getElem().prependTo("#timers");
		}
		selectTimer(timer)
	} else {
		plusCountupTimer();
	}
});

/**
 * カウントアップタイマーを追加する
 */
function plusCountupTimer(){
    var timer = new CountupTimer();
    timer.getElem().prependTo("#timers");
    selectTimer(timer);
}

/**
 * キーショートカットの登録
 */
$(window).keypress(function(e){
    if (!isEventInInput(e)) {
        switch (e.which) {
            case 117:
                // u
                plusCountupTimer();
                break;
            case 106:
                // j
                selectNextTimer();
                break;
                
            case 107:
                // k
                selectPrevTimer();
                break;
                
            default:
                // 選択されているtimerにイベントを流す
                if (selectedTimer) {
                    selectedTimer.shortcut(e);
                }
        }
    }
});

/**
 * Eventがinput要素ないでおこったかのチェック
 * @param {Object} e イベント
 */
function isEventInInput(e){
    return e.target.tagName.toLowerCase() == "input";
}

var selectedTimer; // 選択されているタイマー
function selectTimer(timer){
    if (selectedTimer) {
        selectedTimer.unselect();
    }
    selectedTimer = timer;
    if (timer) { // timerがnullの場合
        timer.select();
    }
}

function unselectTimer(){
    if (selectedTimer != null) {
        if (!selectNextTimer()) {
            if (!selectPrevTimer()) {
                selectTimer(null);
            }
        }
    }
}

function selectNextTimer(){
    if (selectedTimer != null) {
        var nextTimerElem = selectedTimer.getElem().next(":first");
        if (nextTimerElem.size() > 0) {
            var nextTimer = nextTimerElem.data("timer");
            if (nextTimer) {
                selectTimer(nextTimer);
                return nextTimer;
            }
        }
    }
}

function selectPrevTimer(){
    if (selectedTimer != null) {
        var prevTimerElem = selectedTimer.getElem().prev(":first");
        if (prevTimerElem.size() > 0) {
            var prevTimer = prevTimerElem.data("timer");
            if (prevTimer) {
                selectTimer(prevTimer);
                return prevTimer;
            }
        }
    }
}
